package greate.project;

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

/**
 * @author v_zhangshun01
 */
public class App {

    public static void main(String[] args) throws Exception {

        // 创建默认上下文
        CamelContext context = new DefaultCamelContext();

        // 现开启想表达的是 ， camel 在开启后可以动态的新增和关闭路由。
        context.start();

        // 新增路由
        context.addRoutes(new HelloWorldRoute());

        synchronized (App.class){
            App.class.wait();
        }

    }

    /**
     *  delay                   延迟执行                默认 1s
     */
    static class HelloWorldRoute extends RouteBuilder {
        @Override
        public void configure() throws Exception {

            from("timer://foo?" +
                    //
                    "fixedRate=true" +
                    // 执行周期 可以是 1s (一秒) ， 1ms(1毫秒) ， 1M（1分钟）
                    "&period=2s" +
                    // 延迟执行的时间单位同上
                    "&delay=1000ms" +
                    // 重复的次数 设置的为最大的执行个数
                    "&repeatCount=2" +
                    // 指定固定时间开始执行
                    "&time=2021-07-01 17:03:10")
                    // 指定 指定的 Timer。
//                    "&timer=。。。")
                    .process(exchange -> {
                        exchange.getMessage().setBody("俺是触发后放入的数据...");
                        // 指定 时间后 默认会生成 的属性
                        // CamelTimerFiredTime  触发器触发事件
                        // CamelTimerTime
                        // CamelTimerPeriod     间隔时间
                        // CamelTimerName       名字
                        // CamelTimerCounter    触发的总次数
                        exchange.getProperties().forEach((k,v)-> System.out.println(k + " : " + v));
                    })
                    .to("log:HelloWorldRoute");
        }
    }

}
